// import {
//   shop
// } from './constant'
import Api from '../utils/http/api'
import _config from '../utils/http/config.js'

/*从缓存中读值*/
var QRCode = require('./qrcode.js')
const getLocalStorageData = key => {
  try {
    var value = wx.getStorageSync(key)
    if (value) {
      return value
    } else {
      return ''
    }
  } catch (e) {
    return ''
  }
}

const saveUserinfo = (userInfo) => {
  if (userInfo) {
    wx.setStorageSync('user_id', userInfo.userId)

  } else {
    wx.setStorageSync('user_id', '')

  }
}



function showLoading(tip, val) {
  let msg = tip ? tip : '加载中...';
  let time = val ? val : 30000;
  wx.showToast({
    title: msg,
    icon: 'loading',
    duration: time,
    mask: true
  })
}





function getRedirectUrl(options) {
  var urlWithArgs = '?'
  for (var key in options) {
    var value = options[key]
    urlWithArgs += key + '=' + value + '&'
  }
  urlWithArgs = urlWithArgs.substring(0, urlWithArgs.length - 1)
  // console.log(urlWithArgs)
  return urlWithArgs
}


//判断是否是tab页
function isTabPage(str) {
  let page_home = "/pages/home/home"
  let page_my = "/pages/my/my"
  let page_shop = "/pages/shop/shop"
  if (str.startsWith(page_home) || str.startsWith(page_my) || str.startsWith(page_shop)) {
    return true
  }
  return false
}


function createQRCode(text, size) {
  //调用插件中的draw方法，绘制二维码图片
  try {
    let params = {
      size: parseInt(size),
      errorCorrectLevel: 'L'

    }
    params = Object.assign(params, {
      colorRGB: [51, 51, 51]
    })
    let _img = QRCode.createQrCodeImg(text, params)
    return _img

  } catch (e) {
    console.warn(e)
  }
}


// 字符串空判断
const isEmpty = (str) => {
  if (str == null || str == undefined || str == '' || str == 'null' || str == 'undefined') {
    return true;
  }
  return false;
}




// 根据经纬度打开底图
const onOpenMap = (latitude, longitude, scale, address) => {
  wx.openLocation({
    latitude,
    longitude,
    scale: scale || 18,
    address
  })
}

/**
 * @desc 保留小数位
 * @param {number} num 原数据
 * @param {number} decimal 保留小数位
 * @param {boolean} isCarry 是否需要四舍五入
 */
function toFixed(num, decimal = 2, isCarry = true) {
  num = num ? parseInt(num) : 0;
  decimal = decimal ? parseInt(decimal) : 2;
  let multiple = Math.pow(10, decimal)
  isCarry = isCarry || true
  return isCarry ? (num / multiple).toFixed(decimal) : Math.floor(num * multiple) / multiple
}
/**
 * 节流：n 秒内只运行一次，若在 n 秒内重复触发，只有一次生效
 * 节流在间隔一段时间执行一次回调的场景有：
    滚动加载，加载更多或滚到底部监听
    搜索框，搜索联想功能
 * @param fn 需要节流的函数
 * @param gapTime 时间
 */
function throttle(fn, gapTime) {
  if (gapTime == null || gapTime == undefined) {
    gapTime = 1000
  }
  let _lastTime = null
  // 返回新的函数
  return function () {
    let _nowTime = +new Date()
    if (_nowTime - _lastTime > gapTime || !_lastTime) {
      fn.apply(this, arguments) //将this和参数传给原函数
      _lastTime = _nowTime
    }
  }
}

/**
 *  防抖:n 秒后再执行该事件，若在 n 秒内被重复触发，则重新计时
 * 
 * 防抖的原理就是：你尽管触发事件，但是我一定会在事件触发 n 秒后才执行，如果你在一个事件触发的 n 秒内又触发了这个事件，那我就以新的事件的时间为准，n 秒后才执行，总之，就是要等你触发完事件 n 秒内不再触发事件，我才执行
 * 
 * 防抖在连续的事件，只需触发一次回调的场景有：
    搜索框搜索输入。只需用户最后一次输入完，再发送请求
    手机号、邮箱验证输入检测
    窗口大小resize。只需窗口调整完成后，计算窗口大小。防止重复渲染。
 * @param fn 需要防抖的函数
 * @param interval 时间
 */
function debounce(fn, interval) {
  let timer;
  let delay = interval || 1000; // 间隔的时间，如果interval不传，则默认1秒
  return function () {
    let that = this;
    let args = arguments; // 保存此处的arguments，因为setTimeout是全局的，arguments不是防抖函数需要的。
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(function () {
      fn.apply(that, args); // 用apply指向调用debounce的对象，相当于this.fn(args);
    }, delay);
  };
}




//通用提示
function showToast(msg) {
  wx.showToast({
    title: msg,
    icon: 'none',
    duration: 1000,
    mask: true
  });
}






function showModal(contenttxt, confirmtxt, canceltxt, confirm, cancel) {
  wx.showModal({
    title: '提示',
    content: contenttxt,
    cancelText: canceltxt ? canceltxt : '取消',
    cancelColor: '#666666',
    confirmText: confirmtxt ? confirmtxt : '确定',
    confirmColor: '#f5c644',
    showCancel: canceltxt != '',
    success: function (res) {
      if (res.confirm) {
        typeof confirm == "function" && confirm()
      } else if (res.cancel) {
        typeof cancel == "function" && cancel()
      }
    }
  })
}

function getApiImg(url) {
  var img = _config.baseUrl.imgApi + 'file/attachment/' + url + '/l'
  return img

}

module.exports = {
  createQRCode,
  getLocalStorageData,
  saveUserinfo,
  getRedirectUrl,
  showLoading,
  isEmpty,
  onOpenMap,
  toFixed,
  throttle,
  debounce,
  showToast,
  isTabPage,
  showModal,
  getApiImg
}